﻿//using OfficeOpenXml;
//using OfficeOpenXml.Style;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

//namespace XW.Utils
//{
//    /// <summary>
//    /// Excel 导出
//    /// </summary>
//    public static class ExcelHelper
//    {
//        public static byte[] ExportXLSX(List<dynamic> data, List<ExcelColumn> columns, string name)
//        {
//            ExcelPackage pck = new ExcelPackage();
//            var ws = pck.Workbook.Worksheets.Add(name);
//            ws.Cells.Style.WrapText = true;//自动换行
//            int HeaderRowsMax = 2;
//            int ci = 0;
//            if (columns.Where(c => c.columns != null && c.columns.Count > 0).Count() > 0)
//            {
//                HeaderRowsMax = 3;
//            }
//            foreach (var col in columns)
//            {
//                ws.Cells[1, ci + 1].Value = col.header;
//                ws.Cells[1, ci + 1].Style.Font.Bold = true;//字体为粗体
//                if (col.columns != null && col.columns.Count > 0)
//                {
//                    if (col.columns.Count > 1)
//                    {
//                        ws.Cells[1, ci + 1, 1, ci + col.columns.Count].Merge = true;
//                    }
//                    foreach (var col2 in col.columns)
//                    {
//                        ws.Cells[2, ci + 1].Value = col2.header;
//                        ws.Cells[2, ci + 1].Style.Font.Bold = true;//字体为粗体
//                        ci++;
//                    }
//                }
//                else
//                {
//                    if (HeaderRowsMax > 2)
//                    {
//                        ws.Cells[1, ci + 1, HeaderRowsMax - 1, ci + 1].Merge = true;
//                        ws.Cells[1, ci + 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;//垂直居中
//                        ws.Cells[1, ci + 1].Style.HorizontalAlignment =  ExcelHorizontalAlignment.Center;//水平居中
                       
//                    }
//                    ci++;
//                }
//            }
//            if (data.Any())
//            {
//                for (int i = 0; i < data.Count; i++)
//                {
//                    ci = 0;
//                    var dic = (data[i] as IDictionary<string, object>);
//                    foreach (var col in columns)
//                    {

//                        if (col.columns != null && col.columns.Count > 0)
//                        {
//                            foreach (var col2 in col.columns)
//                            {
//                                object value;
//                                if (!dic.TryGetValue(col2.field, out value))
//                                {
//                                    value = "";
//                                }
//                                if (value != null)
//                                {
//                                    string tmp = value.ToString();
//                                    value = tmp.Replace("<br>", "\r\n");
//                                }
//                                ws.Cells[i + HeaderRowsMax, ci + 1].Value = value;
//                                ci++;
//                            }
//                        }
//                        else
//                        {
//                            object value;
//                            if (!dic.TryGetValue(col.field, out value))
//                            {
//                                value = "";
//                            }
//                            if (value != null)
//                            {
//                                string tmp = value.ToString();
//                                value = tmp.Replace("<br>", "\r\n");
//                            }
//                            ws.Cells[i + HeaderRowsMax, ci + 1].Value = value;
//                            ci++;
//                        }
//                    }
//                }
//            }

//            byte[] bytes = pck.GetAsByteArray();
//            pck.Dispose();
//            return bytes;
//        }
//    }

//    public class ExcelColumn
//    {
//        public string header { get; set; }
//        public string field { get; set; }

//        /// <summary>
//        /// 计算公式
//        /// </summary>
//        public string Formula { get; set; }

//        /// <summary>
//        /// 输出格式
//        /// </summary>
//        public string Format { get; set; }
//        public List<ExcelColumn> columns { get; set; } 
//    }
//}
